/* 代码2-12 带头结点的单链表中的插入 */
void Insert(List list, int i, ElemSet x) {
    /* i是插入位置的序号，从1开始 */
    Position new_node, p;
    int counter;

    if (i < 1) { /* 插入位置不合法，退出 */
        printf("ERROR\n");
        return;
    }
    p = list->head;
    counter = 0;
    while ((p != NULL) && (counter < (i - 1))) { /* 找第 i-1 个结点 */
        p = p->next;
        counter++;
    }
    if (p != NULL) { /* p指向第 (i-1)个结点 */
        new_node = (Position)malloc(sizeof(struct ListNode)); /* 创建新的结点 */
        new_node->data = x;
        new_node->next = p->next; /* 将新结点插在p后面 */
        p->next = new_node;
        list->length++;
    } else { /* 插入位置不合法，退出 */
        printf("ERROR\n");
    }
}
/* 代码2-12 结束 */